草庐IT

Java HotSpot 枚举开销

全部标签

c++ - 合并枚举 C++

在我的项目中,我有几个类似这个的枚举声明;enumComparison{LT,//""EQ,//"=="LTEQ,//"="NEQ//"!="};enumArithmetic{  ADD,  //"+"  SUB,  //"-"  MUL,  //"*"  DIV,  //"/"  MOD,  //"%"};我想将其中的几个组合成一个组合枚举,这样;所有元素(来自子枚举)都出现在组合枚举中。所有元素都具有唯一值(显然)。所有元素在组合枚举中的值与原始枚举一致。像这样:enumComparison{LT,//""EQ,//"=="LTEQ,//"="NEQ//"!="  ADD,  //

c++ - 如何制作一个值超过允许的最大整数的枚举?

我正在用C++制作一个枚举,以制作一个使用二进制标志的有限状态机。看起来像:enumVStates{NEUTRAL=0x00000000,//000000//PhysicalStatusDRY=0x00000001,//000001WET=0x00000002,//000010HOT=0x00000004,//000100COLD=0x00000008,//001000BURNED=0x00000016,//etc..FROZEN=0x00000032,EROS=0x00000064,//THANATOS=0x00000128,//SLEEP=0x00000256,STUNNED=0x

c++ - 使用 this-> 访问成员是否有任何开销?

当访问某个类的成员时,我可以使用例如:this->myVar=10或者我可以写:myVar=10我喜欢使用this->,因为它显式声明变量是此类的成员,但与仅使用变量名本身相比,它会产生任何开销吗?作为替代方案,我可以为变量添加一个唯一的前缀,例如_TmyVar,但我已经使用this->很长时间了,所以我只是想知道。 最佳答案 没有开销。编译器将为两个版本生成完全相同的代码。 关于c++-使用this->访问成员是否有任何开销?,我们在StackOverflow上找到一个类似的问题:

c++ - 不安全, `noexcept` 和访问 `std::variant` 的无开销方式

std::variant提供以下访问功能:std::get_if:将pointer指向variant,将pointer返回给alternative。templateauto*std::get_if(std::variant*pv)noexcept;Ifpvisnotanullpointerandpv->index()==I,returnsapointertothevaluestoredinthevariantpointedtobypv.Otherwise,returnsanullpointervalue.这意味着get_if的实现大致如下所示:templateauto*std::get

C++ 在类中声明静态枚举与枚举

在如下所示的类声明中定义时,staticenum和enum定义之间有什么区别?classExample{Example();~Example();staticenumItems{desk=0,chair,monitor};enumColors{red=0,blue,green};}另外,既然我们是在类中定义类型,那我们怎么调用它们呢?以此类推,如果我在类中定义了一个变量,我们称它为成员变量。 最佳答案 static不能应用于enum声明,因此您的代码无效。来自N3337,§7.1.1/5[dcl.stc]Thestaticspeci

c++ - "control reaches end of non-void function"枚举类型完全处理大小写切换

为什么即使处理了type_t的所有可能值,此代码也会触发“控制到达非空函数的结尾”?处理此警告的最佳方法是什么?在切换后添加return-1?(代码测试here)typedefenum{A,B}type_t;intuseType(type_tx){switch(x){caseA:return0;caseB:return1;}}相关:Detectingifcastinganinttoanenumresultsintoanon-enumeratedvalue 最佳答案 一般来说,enum不是唯一的。例如,有人可以像useType((ty

c++ - 指针取消引用开销与分支/条件语句

在繁重的循环中,例如在游戏应用程序中发现的循环,可能有很多因素决定执行循环体的哪一部分(例如,角色对象将根据其当前状态进行不同的更新),因此取而代之的是做的:voidmy_loop_function(intdt){if(conditionX&&conditionY)doFoo();elsedoBar();...}我习惯使用一个函数指针,指向对应角色当前状态的某个逻辑函数,如:void(*updater)(int);voidsomething_happens(){updater=&doFoo;}voidsomething_else_happens(){updater=&doBar;}vo

c++ - 这个枚举声明是否符合标准?

所以枚举通常用于将一组“常量整数”声明为另一种类型,代表某种东西。例如。enumColor{RED=0,BLUE,YELLOW};这很清楚。但最近我在代码中遇到了以下问题。这是在嵌入式系统的编译器中。enumState{DISABLED=0,ENABLED=!DISABLED};而且效果很好。它表现为bool类型。我的问题是,它(这种语法)是否符合ANSI?如果它符合标准,那么为什么编译器会在内部定义类似_Bool的东西来表示bool值,然后在stdbool.h(对于C语言)中定义:#definebool_Bool...//heregoesdefinitionsoftrueandfal

c++ - 扩展枚举?

假设我创建了一个枚举,但最终有人想向该枚举添加项目,该怎么做?例如://blah.hppenumPizzaDressing{DRESSING_OLIVES=0,DRESSING_CHEESE=1};在我的FunkyPizza课上,可能会有胡椒配料。那么如何在不明显修改原始枚举的情况下添加辣椒呢?谢谢。 最佳答案 这最接近您想要的:Baseenumclassinheritance 关于c++-扩展枚举?,我们在StackOverflow上找到一个类似的问题: h

c++ - 为什么作用域枚举允许使用 |使用先前分配的值进行初始化时的运算符?

我正在将无作用域枚举转换为有作用域枚举,遇到了一个难题。Stroustrup,C++编程语言,第4版,第8.4.1节,范围枚举类未隐式转换为整数类型的文档,并为运算符提供代码|和&作为如何使用static_cast来解决这个问题的示例。在先前定义的enum值上使用|运算符进行以下初始化不应该是非法的吗?enumclassFileCopy{PreviousHDUs=1,CurrentHDU=2,FollowingHDUs=4,AllHDUs=PreviousHDUs|CurrentHDU|FollowingHDUs,CurrentHeader=8};intmain(){std::cout